const { accessTokenExpired } = require('./utils')
const services = require('./services')

let accessTokenStore = null
function saveAccessTokenStore(store) {
  accessTokenStore = Object.assign({}, store, {
    expires_in: ~~(new Date().getTime() / 1000) + store.expires_in /* seconds */
  })
}

// Notes:
// server Reload, can't make sure access_token is valid
// access_token expire_in 7200 for now
function getAccessToken(appid, secret) {
  if (!accessTokenExpired(accessTokenStore)) {
    console.log('store in memory')
    return Promise.resolve(accessTokenStore.access_token)
  }

  console.log('from wechat server')

  return services.getAccessToken(appid, secret)
  .then(response => {
    const { errcode, errmsg } = response

    if (errcode && errmsg) {
      throw new Error(errmsg)
    }

    console.log(response)
    saveAccessTokenStore(response)
    return response.access_token
  })
}

module.exports = {
  accessTokenStore: accessTokenStore,
  saveAccessTokenStore: saveAccessTokenStore,
  getAccessToken: getAccessToken
}
